// miniprogram/subpkg/pages/login/login.js
Page({
  data: {
    isLoading: false,
    showAuthModal: false,
    tempAvatarUrl: '', // 临时存放用户选择的头像路径
    tempNickName: ''
  },

  // 主登录流程处理：仅检测是否存在，不创建
  async handleLogin() {
    this.setData({ isLoading: true });
    wx.showLoading({ title: '正在登录...' });

    try {
      const res = await wx.cloud.callFunction({ name: 'userExists' });
      console.log('userExists result:', res);

      if (res.result.code !== 0) {
        throw new Error(res.result.msg || '登录失败');
      }

      const { exists, authorized, userInfo } = res.result.data || {};

      if (exists && authorized && userInfo) {
        // 已有且资料完整：直接登录
        this.finishLogin(userInfo);
      } else {
        // 不存在或资料未完善：进入资料填写页
        this.setData({ showAuthModal: true });
        wx.hideLoading();
        this.setData({ isLoading: false });
      }
    } catch (error) {
      console.error('handleLogin error:', error);
      wx.hideLoading();
      this.setData({ isLoading: false });
      wx.showToast({ title: error.message || '登录出错', icon: 'none' });
    }
  },

  // 用户选择头像回调
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail;
    this.setData({
      tempAvatarUrl: avatarUrl,
    });
  },

  // 用户输入昵称回调
  onNicknameInput(e) {
    this.setData({
      tempNickName: e.detail.value
    });
  },

  // 用户同意授权（注册并登录）
  async onAgree() {
    if (!this.data.tempAvatarUrl) {
      wx.showToast({ title: '请选择一个头像', icon: 'none' });
      return;
    }
    if (!this.data.tempNickName.trim()) {
      wx.showToast({ title: '请输入昵称', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '正在注册...' });

    try {
      // 1. 上传头像到云存储，得到 fileID
      const avatarFileID = await this.uploadFile(this.data.tempAvatarUrl);

      // 2. 资料齐全后调用注册云函数，仅此时创建用户
      const res = await wx.cloud.callFunction({
        name: 'registerUser',
        data: {
          nickName: this.data.tempNickName,
          avatarFileID
        }
      });

      if (!res.result || res.result.code !== 0) {
        throw new Error((res.result && res.result.msg) || '注册失败');
      }

      // 3. 完成登录
      this.finishLogin(res.result.data.userInfo);

    } catch (error) {
      console.error('onAgree error:', error);
      wx.hideLoading();
      wx.showToast({ title: error.message || '注册出错', icon: 'none' });
    }
  },

  // 用户拒绝授权（老按钮已隐藏，此处兜底为关闭资料页）
  async onDeny() {
    this.onCancelAuth();
  },

  // 取消登录，返回初始登录页
  onCancelAuth() {
    this.setData({
      showAuthModal: false
      // 如需清空临时信息，可取消注释
      // tempAvatarUrl: '',
      // tempNickName: ''
    });
  },
  
  // 上传文件到云存储
  uploadFile(filePath) {
    // 尝试从本地存储获取openid，如果失败则使用时间戳作为临时方案
    const userInfo = wx.getStorageSync('userInfo');
    const openid = userInfo?._openid || userInfo?.openid || `temp_${Date.now()}`;
    const cloudPath = `user_avatars/${openid}-${Date.now()}${filePath.match(/\.[^.]+?$/)[0]}`;
    
    return new Promise((resolve, reject) => {
      wx.cloud.uploadFile({
        cloudPath,
        filePath,
        success: res => {
          console.log('Upload success:', res.fileID);
          resolve(res.fileID);
        },
        fail: err => {
          console.error('Upload fail:', err);
          reject(new Error('头像上传失败'));
        }
      });
    });
  },

  // 完成登录的收尾工作
  finishLogin(userInfo) {
    // 写入用户信息
    wx.setStorageSync('userInfo', userInfo);
    wx.setStorageSync('hasUserInfo', true);

    // 确保存在本地token（用于前端鉴权闸门）
    let token = wx.getStorageSync('local_token');
    if (!token) {
      token = 'local_' + Date.now();
      wx.setStorageSync('local_token', token);
    }
    
    const app = getApp();
    app.globalData.userInfo = userInfo;
    app.globalData.hasUserInfo = true;
    app.globalData.local_token = token;

    wx.hideLoading();
    wx.showToast({
      title: '登录成功',
      icon: 'success',
      duration: 1500
    });

    setTimeout(() => {
      wx.reLaunch({ url: '/pages/index/index' });
    }, 1500);
  },

  onUserAgreement() {
    wx.showModal({
      title: '用户协议',
      content: '感谢您使用督搭学习监督小程序。我们致力于保护您的隐私和数据安全，为您提供优质的学习监督服务。',
      showCancel: false,
      confirmText: '我知道了'
    });
  },

  onPrivacyPolicy() {
    wx.showModal({
      title: '隐私政策',
      content: '我们会严格保护您的个人信息，仅用于提供学习监督服务。您的微信头像和昵称仅用于显示，不会泄露给第三方。',
      showCancel: false,
      confirmText: '我知道了'
    });
  }
});



